package com.hengxinguotong.zhihuichengjian.fragment;

import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ScrollView;

import com.google.gson.Gson;
import com.hengxinguotong.zhihuichengjian.R;
import com.hengxinguotong.zhihuichengjian.ui.app.BaseFragment;
import com.hengxinguotong.zhihuichengjian.bean.CountBean;
import com.hengxinguotong.zhihuichengjian.ui.MainActivity;
import com.hengxinguotong.zhihuichengjian.utils.SPUtil;
import com.hengxinguotong.zhihuichengjian.utils.Utils;
import com.hengxinguotong.zhihuichengjian.widget.pullrefresh.PullToRefreshBase;
import com.hengxinguotong.zhihuichengjian.widget.pullrefresh.PullToRefreshScrollView;

import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import lecho.lib.hellocharts.gesture.ZoomType;
import lecho.lib.hellocharts.model.Axis;
import lecho.lib.hellocharts.model.AxisValue;
import lecho.lib.hellocharts.model.Line;
import lecho.lib.hellocharts.model.LineChartData;
import lecho.lib.hellocharts.model.PointValue;
import lecho.lib.hellocharts.model.ValueShape;
import lecho.lib.hellocharts.model.Viewport;
import lecho.lib.hellocharts.view.LineChartView;

/**
 * Created by Administrator on 2017/11/2.
 * 统计页面
 */

public class StatisticsFragment extends BaseFragment {

    private View rootView = null;
    private MainActivity mainActivity;

    @BindView(R.id.project_quality)
    LineChartView projectQuality;
    @BindView(R.id.project_secury)
    LineChartView projectSecury;
    @BindView(R.id.refresh_scroll)
    PullToRefreshScrollView     refreshScroll;

    private List<PointValue> pointValues ;//图点坐标
    private List<AxisValue> axisXValues ;//图x轴
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        if (rootView == null) {
            rootView = inflater.inflate(R.layout.fragment_statistics, null);
            ButterKnife.bind(this, rootView);
            mainActivity = (MainActivity) getActivity();
            refreshScroll.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ScrollView>() {
                @Override
                public void onPullDownToRefresh(PullToRefreshBase<ScrollView> refreshView) {
                    queryCountByArea("");
                }

                @Override
                public void onPullUpToRefresh(PullToRefreshBase<ScrollView> refreshView) {

                }
            });
        }else {
            ViewGroup parent = (ViewGroup) rootView.getParent();
            if (parent != null) {
                parent.removeView(rootView);
            }
        }
        ButterKnife.bind(this, rootView);
        return rootView;
    }

    //获取各区从业人员/特种设备/检查次数
    private void  queryCountByArea(String alert){
        Utils.requestData(alert, mainActivity, "/main/queryCount/" + SPUtil.getString(mainActivity, "uuid"), null, new Utils.ListenerJson() {
            @Override
            public void onSuccess(String json) {
                if (refreshScroll != null && refreshScroll.isRefreshing()) {
                    refreshScroll.onRefreshComplete();
                }
                if(!Utils.isEmpty(json)){
                    Gson gson = new Gson();
                    CountBean countBean = gson.fromJson(json, CountBean.class);
                    process(countBean.getValue());
                }
            }

            @Override
            public void onFailure(String json) {
                if (refreshScroll != null && refreshScroll.isRefreshing()) {
                    refreshScroll.onRefreshComplete();
                }
            }
        });
    }

    private void process(CountBean.CountValue value){
        getAxisPoints(value.getQualityCount().getyData());
        getAxisXLables(value.getQualityCount().getxData());
        initQualityLineChart();//初始化质量自查曲线图

        getAxisPoints(value.getSafetyCount().getyData());
        getAxisXLables(value.getSafetyCount().getxData());
        initSecuryLineChart();//初始化安全自查曲线图

    }

    //初始化项目部质量自查数统计曲线图
    private void initQualityLineChart(){
        Line line = new Line(pointValues).setColor(Color.parseColor("#ff53bcf5"));  ///折线的颜色
        List<Line> lines = new ArrayList<Line>();
        line.setShape(ValueShape.CIRCLE);//折线图上每个数据点的形状  这里是圆形 （有三种 ：ValueShape.SQUARE  ValueShape.CIRCLE  ValueShape.DIAMOND）
        line.setCubic(true);//曲线是否平滑
        line.setStrokeWidth(1);//线条的粗细，默认是3
        line.setFilled(true);//是否填充曲线的面积
        line.setHasLabels(true);///曲线的数据坐标是否加上备注
        line.setHasLabelsOnlyForSelected(false);//点击数据坐标提示数据（设置了这个line.setHasLabels(true);就无效）
        line.setHasLines(true);//是否用直线显示。如果为false 则没有曲线只有点显示
        line.setHasPoints(true);//是否显示圆点 如果为false 则没有原点只有点显示
        lines.add(line);
        LineChartData data = new LineChartData();
        data.setLines(lines);

        //坐标轴
        Axis axisX = new Axis(); //X轴
        axisX.setHasTiltedLabels(false);  //X轴下面坐标轴字体是斜的显示还是直的，true是斜的显示
//	    axisX.setTextColor(Color.WHITE);  //设置字体颜色
        axisX.setTextColor(Color.parseColor("#D6D6D9"));//灰色

//        axisX.setName("未来几天的天气");  //表格名称
        axisX.setTextSize(11);//设置字体大小
        axisX.setMaxLabelChars(7); ////最多几个X轴坐标，意思就是你的缩放让X轴上数据的个数7<=x<=mAxisValues.length
        axisX.setValues(axisXValues);  //填充X轴的坐标名称
        data.setAxisXBottom(axisX); //x 轴在底部
//	    data.setAxisXTop(axisX); //x 轴在顶部
        axisX.setHasLines(true); //x 轴分割线


        Axis axisY = new Axis();  //Y轴
//        axisY.setName("y轴标注");//y轴标注
        axisY.setTextSize(11);//设置字体大小
        data.setAxisYLeft(axisY);  //Y轴设置在左边
        //data.setAxisYRight(axisY);  //Y轴设置在右边
        // 设置行为属性，支持缩放、滑动以及平移
        projectQuality.setInteractive(true);//是否支持与用户互动
        projectQuality.setZoomEnabled(true);//是否支持缩放
        projectQuality.setZoomType(ZoomType.HORIZONTAL);  //缩放类型，水平
        projectQuality.setMaxZoom((float) 3);//缩放比例
        projectQuality.setLineChartData(data);
        projectQuality.setVisibility(View.VISIBLE);
        /**注：下面的7，10只是代表一个数字去类比而已
         * 尼玛搞的老子好辛苦！！！见（http://forum.xda-developers.com/tools/programming/library-hellocharts-charting-library-t2904456/page2）;
         * 下面几句可以设置X轴数据的显示个数（x轴0-7个数据），当数据点个数小于（29）的时候，缩小到极致hellochart默认的是所有显示。当数据点个数大于（29）的时候，
         * 若不设置axisX.setMaxLabelChars(int count)这句话,则会自动适配X轴所能显示的尽量合适的数据个数。
         * 若设置axisX.setMaxLabelChars(int count)这句话,
         * 33个数据点测试，若 axisX.setMaxLabelChars(10);里面的10大于v.right= 7; 里面的7，则
         刚开始X轴显示7条数据，然后缩放的时候X轴的个数会保证大于7小于10
         若小于v.right= 7;中的7,反正我感觉是这两句都好像失效了的样子 - -!
         * 并且Y轴是根据数据的大小自动设置Y轴上限
         * 若这儿不设置 v.right= 7; 这句话，则图表刚开始就会尽可能的显示所有数据，交互性太差
         */
        Viewport v = new Viewport(projectQuality.getMaximumViewport());
        v.left = 0;
        v.right= 7;
        projectQuality.setCurrentViewport(v);
    }

    //初始化项目部安全自查数统计曲线图
    private void initSecuryLineChart(){
        Line line = new Line(pointValues).setColor(Color.parseColor("#ff53bcf5"));  ///折线的颜色
        List<Line> lines = new ArrayList<Line>();
        line.setShape(ValueShape.CIRCLE);//折线图上每个数据点的形状  这里是圆形 （有三种 ：ValueShape.SQUARE  ValueShape.CIRCLE  ValueShape.SQUARE）
        line.setCubic(true);//曲线是否平滑
        line.setStrokeWidth(1);//线条的粗细，默认是3
        line.setFilled(true);//是否填充曲线的面积
        line.setHasLabels(false);///曲线的数据坐标是否加上备注
        line.setHasLabelsOnlyForSelected(true);//点击数据坐标提示数据（设置了这个line.setHasLabels(true);就无效）
        line.setHasLines(true);//是否用直线显示。如果为false 则没有曲线只有点显示
        line.setHasPoints(false);//是否显示圆点 如果为false 则没有原点只有点显示
        lines.add(line);
        LineChartData data = new LineChartData();
        data.setLines(lines);

        //坐标轴
        Axis axisX = new Axis(); //X轴
        axisX.setHasTiltedLabels(false);  //X轴下面坐标轴字体是斜的显示还是直的，true是斜的显示
//	    axisX.setTextColor(Color.WHITE);  //设置字体颜色
        axisX.setTextColor(Color.parseColor("#D6D6D9"));//灰色

//        axisX.setName("未来几天的天气");  //表格名称
        axisX.setTextSize(11);//设置字体大小
        axisX.setMaxLabelChars(7); ////最多几个X轴坐标，意思就是你的缩放让X轴上数据的个数7<=x<=mAxisValues.length
        axisX.setValues(axisXValues);  //填充X轴的坐标名称
        data.setAxisXBottom(axisX); //x 轴在底部
//	    data.setAxisXTop(axisX); //x 轴在顶部
        axisX.setHasLines(true); //x 轴分割线


        Axis axisY = new Axis();  //Y轴
//        axisY.setName("y轴标注");//y轴标注
        axisY.setTextSize(11);//设置字体大小
        data.setAxisYLeft(axisY);  //Y轴设置在左边
        //data.setAxisYRight(axisY);  //Y轴设置在右边
        // 设置行为属性，支持缩放、滑动以及平移
        projectSecury.setInteractive(true);//与用户互动
        projectSecury.setZoomType(ZoomType.HORIZONTAL);  //缩放类型，水平
        projectSecury.setMaxZoom((float) 3);//缩放比例
        projectSecury.setLineChartData(data);
        projectSecury.setVisibility(View.VISIBLE);
        /**注：下面的7，10只是代表一个数字去类比而已
         * 尼玛搞的老子好辛苦！！！见（http://forum.xda-developers.com/tools/programming/library-hellocharts-charting-library-t2904456/page2）;
         * 下面几句可以设置X轴数据的显示个数（x轴0-7个数据），当数据点个数小于（29）的时候，缩小到极致hellochart默认的是所有显示。当数据点个数大于（29）的时候，
         * 若不设置axisX.setMaxLabelChars(int count)这句话,则会自动适配X轴所能显示的尽量合适的数据个数。
         * 若设置axisX.setMaxLabelChars(int count)这句话,
         * 33个数据点测试，若 axisX.setMaxLabelChars(10);里面的10大于v.right= 7; 里面的7，则
         刚开始X轴显示7条数据，然后缩放的时候X轴的个数会保证大于7小于10
         若小于v.right= 7;中的7,反正我感觉是这两句都好像失效了的样子 - -!
         * 并且Y轴是根据数据的大小自动设置Y轴上限
         * 若这儿不设置 v.right= 7; 这句话，则图表刚开始就会尽可能的显示所有数据，交互性太差
         */
        Viewport v = new Viewport(projectSecury.getMaximumViewport());
        v.left = 0;
        v.right= 7;
        projectSecury.setCurrentViewport(v);
    }


    /**
     * 质量图表的每个点的显示
     */
    private void getAxisPoints(String[] yData) {
        pointValues = new ArrayList<PointValue>();
        for (int i = 0; i < yData.length; i++) {
            Float f = Float.parseFloat(yData[i]);
            pointValues.add(new PointValue(i, f));
        }
    }

    /*
     *获取线形图柱状图x轴坐标
     */
    private void getAxisXLables(String[] xData){
        axisXValues = new ArrayList<AxisValue>();
        for(int i = 0; i < xData.length; i++ ){
            AxisValue value = new AxisValue(i);//值是在哪显示 i 是指 第i个柱状图
            value.setLabel(xData[i]);//设置显示的文本，默认为柱状图的位置
            axisXValues.add(value);
        }
    }

    @Override
    public void onLazyLoad() {
        queryCountByArea("加载中…");//查询特种设备、每天的质量检查或者安全检查数量、从业人员

    }
}
